package com.bailiny.basicUtils;

import com.google.common.base.Preconditions;
import org.junit.Test;

/**
 * 前置条件
 * Guava在Preconditions类中提供了若干前置条件判断的实用方法，建议在Eclipse中静态导入这些方法。每个方法都有三个变种</br>
 * checkArgument(boolean) 检查boolean是否为true，用来检查传递给方法的参数。 IllegalArgumentException
 * checkNotNull(T) 检查value是否为null，该方法直接返回value，因此可以内嵌使用checkNotNull。 NullPointerException
 * checkState(boolean) 用来检查对象的某些状态。 IllegalStateException
 * checkElementIndex(int index, int size) 检查index作为索引值对某个列表、字符串或数组是否有效。index>=0 && index<size  IndexOutOfBoundsException
 * checkPositionIndex(int index, int size) 检查index作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size IndexOutOfBoundsException
 * checkPositionIndexes(int start, int end, int size) 检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效 IndexOutOfBoundsException
 */
public class PreconditionsDemo {

    @Test
    public void test() {
        int i = 6;
        int j = 5;
        Preconditions.checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
        Preconditions.checkArgument(i < j, "Expected i < j, but %s > %s", i, j);
        Integer integer = null;
        Preconditions.checkNotNull(integer, "cannot be null"); // 检查value是否为null，该方法直接返回value，因此可以内嵌使用checkNotNull。
        Preconditions.checkState(true);
    }
}
